package com.tangcco.lockwell.repository;

import com.tangcco.lockwell.domain.VocabularyList;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;



/**
 * 生词表的mapper
 * @author 张恒科
 * 用于映射数据库中的vocabulary_list表
 */
public interface VocabularyListMapper {

        int insertSelective(VocabularyList record);

        int updateByPrimaryKeySelective(VocabularyList record);
        // 插入一条词汇记录到vocabulary_list表
        int insertVocabulary(VocabularyList vocabularyList);

        // 根据id查询词汇记录
        VocabularyList selectVocabularyById(int vocabularyId);

        // 根据用户ID查询该用户的所有词汇记录
        List<VocabularyList> selectVocabularyByUserId(int userId);

        // 根据题目ID查询对应的词汇记录列表
        List<VocabularyList> selectVocabularyByQuestionId(@Param("questionId") int questionId, @Param("userId") int userId);

        // 更新词汇记录
        int updateVocabulary(VocabularyList vocabularyList);

        // 根据id删除词汇记录
        int deleteVocabularyById(int vocabularyId);

        // 查询所有词汇记录
        List<VocabularyList> selectAllVocabulary();

        // 查询所有掌握情况为指定状态的词汇记录
        List<VocabularyList> selectVocabularyBySituation(@Param("situation") String situation, @Param("userId") int userId);

        // 模糊查询包含指定生词的词汇记录
        List<VocabularyList> selectVocabularyByNewWordLike(@Param("newWord") String newWord, @Param("userId") int userId);

        // 分页查询词汇记录（传入页码和每页记录数）
        List<VocabularyList> selectVocabularyByPage(int pageNum, int pageSize);

        // 查询词汇记录总数
        int countVocabulary(@Param("userId") int userId);

        // 根据用户ID和掌握情况查询词汇记录
        List<VocabularyList> selectVocabularyByUserIdAndSituation(@Param("userId") int userId, @Param("situation") String situation);

        // 更新词汇记录的掌握情况
        int updateVocabularySituation(int vocabularyId, String newSituation);

        // 批量插入词汇记录（传入词汇记录列表）
        int insertVocabularyBatch(List<VocabularyList> vocabularyLists);

        // 批量删除词汇记录（传入要删除的id列表）
        int deleteVocabularyByIds(@Param("idList") List<Integer> idList);

        List<VocabularyList> selectByCondition(VocabularyList vocabularyList);


    }



